{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 10,000 bitcoin network"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "_cell_guid": "2bc686a7-b88e-47df-87c0-7ede5228de7d",
    "_uuid": "5ea65d91354243522fcc1dd32dff74059585a461",
    "colab_type": "text",
    "id": "MltpTOiJWElZ"
   },
   "source": [
    "This lab will dig into the fates of the bitcoin transactions tied to [the infamous 10,000 bitcoin pizza](https://en.bitcoin.it/wiki/Laszlo_Hanyecz).  \n",
    "\n",
    "This code is based on [code originally written](https://gist.github.com/allenday/1207a2c0b962d65b101d1e753ebc1c52) by [Allen Day](https://twitter.com/allenday) and modified by Sohien Dane and Meg Risdal from these Kaggle kernels (parts [1](https://www.kaggle.com/sohier/tracing-the-10-000-btc-pizza/), [2](https://www.kaggle.com/sohier/pizza-btc-post-processing/), [3](https://www.kaggle.com/mrisdal/visualizing-the-10k-btc-pizza-transaction-network)). It will be used to visualize a directed graph representing Bitcoin transactions that follow the first known exchange of Bitcoin for goods on May 17, 2010 made by [Laszlo Hanyecz](https://en.bitcoin.it/wiki/Laszlo_Hanyecz).\n",
    "\n",
    "In this lab, we will:\n",
    "1. Retrieve as many transactions as possible from BigQuery within 2 degrees of separation from the pizza exchange. \n",
    "- Post-process the transactions to remove excess transactions from step 1 because the query was overly-greedy to ensure the number of table scans equals the degrees of separation.\n",
    "- Visualize the directed graph."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Extract all the related transactions from BigQuery\n",
    "\n",
    "In these next steps you retrieve as many transactions as possible from BigQuery within 2 degrees of separation from the pizza exchange. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "_cell_guid": "ca5fcfed-8ce8-4d1e-980f-b4a80dd38506",
    "_uuid": "4a5fd2b7aeca617d446b13f8a20259cfd1a509f1",
    "colab": {},
    "colab_type": "code",
    "id": "mDQ7MseOWEla"
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from google.cloud import bigquery"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "OyGBvsncWPSf"
   },
   "outputs": [],
   "source": [
    "bq = bigquery.Client()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {
    "_cell_guid": "2bc6ebe7-5204-4a8c-b012-ad1a59152f21",
    "_uuid": "33b04a30030d7f54b6516520cbff7233a061457f",
    "colab": {},
    "colab_type": "code",
    "id": "mb9jd8JdWElk"
   },
   "outputs": [],
   "source": [
    "QUERY_TEMPLATE = \"\"\"\n",
    "SELECT\n",
    "    timestamp,\n",
    "    inputs.input_pubkey_base58 AS input_key,\n",
    "    outputs.output_pubkey_base58 AS output_key,\n",
    "    outputs.output_satoshis as satoshis\n",
    "FROM `bigquery-public-data.bitcoin_blockchain.transactions`\n",
    "    JOIN UNNEST (inputs) AS inputs\n",
    "    JOIN UNNEST (outputs) AS outputs\n",
    "WHERE inputs.input_pubkey_base58 IN UNNEST({0})\n",
    "    AND outputs.output_satoshis  >= {1}\n",
    "    AND inputs.input_pubkey_base58 IS NOT NULL\n",
    "    AND outputs.output_pubkey_base58 IS NOT NULL\n",
    "GROUP BY timestamp, input_key, output_key, satoshis\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {
    "_cell_guid": "1a52cd18-b61f-496d-a603-c141efb22d52",
    "_uuid": "17c51677541ecf871546e8372788e25fcd754367",
    "colab": {},
    "colab_type": "code",
    "id": "ayUULPBpWEln"
   },
   "outputs": [],
   "source": [
    "def trace_transactions(target_depth, seeds, min_satoshi_per_transaction):\n",
    "    \"\"\"\n",
    "    Trace transactions associated with a given bitcoin key.\n",
    "\n",
    "    To limit the number of BigQuery calls, this function ignores time. \n",
    "    If you care about the order of transactions, you'll need to do post-processing.\n",
    "\n",
    "    May return a deeper graph than the `target_depth` if there are repeated transactions\n",
    "    from wallet a to b or or self transactions (a -> a).\n",
    "    \"\"\"\n",
    "    MAX_SEEDS_PER_QUERY = 500\n",
    "    query = QUERY_TEMPLATE.format(seeds, min_satoshi_per_transaction)\n",
    "    #print(f'Estimated total query size: {int(bq_assist.estimate_query_size(query)) * MAX_DEPTH}')\n",
    "    results = []\n",
    "    seeds_scanned = set()\n",
    "    for i in range(target_depth):\n",
    "        seeds = seeds[:MAX_SEEDS_PER_QUERY]\n",
    "        print(\"Now scanning {} seeds\".format(len(seeds)))\n",
    "        query = QUERY_TEMPLATE.format(seeds, min_satoshi_per_transaction)\n",
    "        transactions = bq.query(query).to_dataframe()\n",
    "        results.append(transactions)\n",
    "        # limit query kb by dropping any duplicated seeds\n",
    "        seeds_scanned.update(seeds)\n",
    "        seeds = list(set(transactions.output_key.unique()).difference(seeds_scanned))\n",
    "    return pd.concat(results).drop_duplicates()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {
    "_cell_guid": "403ed9ca-f824-4551-af85-3774c7def266",
    "_uuid": "8a6ee901307f19dd19ef1648454045c1ddb68a63",
    "colab": {},
    "colab_type": "code",
    "id": "u10HhdaOWElp"
   },
   "outputs": [],
   "source": [
    "MAX_DEPTH = 2\n",
    "BASE_SEEDS = ['1XPTgDRhN8RFnzniWCddobD9iKZatrvH4']\n",
    "SATOSHI_PER_BTC = 10**7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "_cell_guid": "3a019b6f-ff2e-43b1-83d7-48600142cb8d",
    "_uuid": "0d90130de3093467491ba8f626669cecd3a02954",
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 85
    },
    "colab_type": "code",
    "id": "hNFjB4PKWEls",
    "outputId": "edb87888-8fc3-4778-da73-8882321b7f34",
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Now scanning 1 seeds\n",
      "Now scanning 27 seeds\n"
     ]
    }
   ],
   "source": [
    "df = trace_transactions(MAX_DEPTH, BASE_SEEDS, 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 34
    },
    "colab_type": "code",
    "id": "59W92jYcXnvC",
    "outputId": "454438bf-5600-4757-fb53-e5d519a7e5b2"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "752"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.size"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "rllUlcOPXonf"
   },
   "source": [
    "## Post-processing the data pulled from BigQuery\n",
    "\n",
    "This stage handles the post-processing of data pulled from BigQuery in step 1. At the end, we'll have a graph of transactions for plotting in NetworkX."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {
    "_cell_guid": "820a1235-5fa5-4535-9c4e-810e533a1f5a",
    "_uuid": "b0872bdc1aeab46411f5d8f5b521f561366d499d",
    "colab": {},
    "colab_type": "code",
    "id": "yLYGfeAkWEl5"
   },
   "outputs": [],
   "source": [
    "df['date_time'] = pd.to_datetime(df.timestamp * 1000000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {
    "_cell_guid": "d3168205-f35f-4810-ac3f-0c44608f7e5e",
    "_uuid": "9b461bcc84a985dc148e4f5a0e9880772c4a7922",
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 213
    },
    "colab_type": "code",
    "id": "LeQvJzP8WEl7",
    "outputId": "bf84602b-ac9e-4aa3-ec4c-bde4112d2fd6"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>timestamp</th>\n",
       "      <th>input_key</th>\n",
       "      <th>output_key</th>\n",
       "      <th>satoshis</th>\n",
       "      <th>date_time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1281069800000</td>\n",
       "      <td>1XPTgDRhN8RFnzniWCddobD9iKZatrvH4</td>\n",
       "      <td>1CQDMQ5HDY2gVoV17H5fptsbzTA6qxwbjT</td>\n",
       "      <td>156800000000</td>\n",
       "      <td>2010-08-06 04:43:20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1511333577000</td>\n",
       "      <td>1XPTgDRhN8RFnzniWCddobD9iKZatrvH4</td>\n",
       "      <td>1MyQWqA8Ykcm9W5qKcYGokpYsV8tJDYguy</td>\n",
       "      <td>42419301</td>\n",
       "      <td>2017-11-22 06:52:57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1272225849000</td>\n",
       "      <td>1XPTgDRhN8RFnzniWCddobD9iKZatrvH4</td>\n",
       "      <td>157fRrqAKrDyGHr1Bx3yDxeMv8Rh45aUet</td>\n",
       "      <td>1500000000</td>\n",
       "      <td>2010-04-25 20:04:09</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       timestamp                          input_key  \\\n",
       "0  1281069800000  1XPTgDRhN8RFnzniWCddobD9iKZatrvH4   \n",
       "1  1511333577000  1XPTgDRhN8RFnzniWCddobD9iKZatrvH4   \n",
       "2  1272225849000  1XPTgDRhN8RFnzniWCddobD9iKZatrvH4   \n",
       "\n",
       "                           output_key      satoshis           date_time  \n",
       "0  1CQDMQ5HDY2gVoV17H5fptsbzTA6qxwbjT  156800000000 2010-08-06 04:43:20  \n",
       "1  1MyQWqA8Ykcm9W5qKcYGokpYsV8tJDYguy      42419301 2017-11-22 06:52:57  \n",
       "2  157fRrqAKrDyGHr1Bx3yDxeMv8Rh45aUet    1500000000 2010-04-25 20:04:09  "
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [],
   "source": [
    "df.head(3).to_csv('transactions.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "3jknaijLYBBs"
   },
   "outputs": [],
   "source": [
    "def dig_row(row, seeds, min_satoshis, trace_from_key):\n",
    "    if row['satoshis'] < min_satoshis:\n",
    "        return None\n",
    "    if trace_from_key and row['input_key'] not in seeds:\n",
    "        return None\n",
    "    elif not trace_from_key and row['output_key'] not in seeds:\n",
    "        return None\n",
    "    seeds.add(row['output_key'])\n",
    "    return row\n",
    "\n",
    "def single_pass_dig(initial_seeds, input_df, initial_datetime=None, min_satoshis=0, trace_from_key=True):\n",
    "    df = input_df.copy()\n",
    "    active_seeds = set(initial_seeds)\n",
    "    if trace_from_key and initial_datetime is not None:\n",
    "        df = df[df['date_time'] >= initial_datetime]\n",
    "    elif not(trace_from_key) and initial_datetime is not None:\n",
    "        df = df[df['date_time'] <= initial_datetime]\n",
    "    df.sort_values(by=['timestamp'], ascending=trace_from_key, inplace=True)\n",
    "    transactions = []\n",
    "    for index, row in df.iterrows():\n",
    "        rv = dig_row(row, active_seeds, min_satoshis, trace_from_key)\n",
    "        if rv is not None:\n",
    "            transactions.append(rv)\n",
    "    return pd.DataFrame(transactions)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "IIPPPCjgYBc6"
   },
   "outputs": [],
   "source": [
    "future_transactions = single_pass_dig(BASE_SEEDS, df, \n",
    "                                      initial_datetime=pd.to_datetime(\"May 16, 2010\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 142
    },
    "colab_type": "code",
    "id": "lH5zkoToYGUs",
    "outputId": "466305b1-a77d-4972-89cf-01874120aa55"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>input_key</th>\n",
       "      <th>output_key</th>\n",
       "      <th>satoshis</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>12hEZssdWGLS8UsavJzYAUgxiXLA4x4bu7</td>\n",
       "      <td>1GAnVbQpkT2CFm9RAu13R22g5A9MXPR6vG</td>\n",
       "      <td>104687000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>13gWLbMdqyftxUw7mvtn4FQdGaAAWkErgF</td>\n",
       "      <td>1GAnVbQpkT2CFm9RAu13R22g5A9MXPR6vG</td>\n",
       "      <td>104687000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>13pVVjBntbheW93GNCWKA1ZMdbQrRopNsp</td>\n",
       "      <td>1GAnVbQpkT2CFm9RAu13R22g5A9MXPR6vG</td>\n",
       "      <td>104687000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                            input_key                          output_key  \\\n",
       "0  12hEZssdWGLS8UsavJzYAUgxiXLA4x4bu7  1GAnVbQpkT2CFm9RAu13R22g5A9MXPR6vG   \n",
       "1  13gWLbMdqyftxUw7mvtn4FQdGaAAWkErgF  1GAnVbQpkT2CFm9RAu13R22g5A9MXPR6vG   \n",
       "2  13pVVjBntbheW93GNCWKA1ZMdbQrRopNsp  1GAnVbQpkT2CFm9RAu13R22g5A9MXPR6vG   \n",
       "\n",
       "       satoshis  \n",
       "0  104687000000  \n",
       "1  104687000000  \n",
       "2  104687000000  "
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "total_flows = future_transactions[['input_key', 'output_key', 'satoshis']].groupby(\n",
    "    by=['input_key', 'output_key']).sum().reset_index()\n",
    "total_flows.head(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 153
    },
    "colab_type": "code",
    "id": "JCPpbTDTYLkA",
    "outputId": "df77ce7c-79f1-44a4-c80c-aae0558d2ede"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 106 entries, 0 to 105\n",
      "Data columns (total 3 columns):\n",
      "input_key     106 non-null object\n",
      "output_key    106 non-null object\n",
      "satoshis      106 non-null int64\n",
      "dtypes: int64(1), object(2)\n",
      "memory usage: 2.6+ KB\n"
     ]
    }
   ],
   "source": [
    "total_flows.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [],
   "source": [
    "total_flows.head(3).to_csv('total_flows.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "Oj8ljBxrYP4r"
   },
   "source": [
    "## Visualizing the network\n",
    "\n",
    "This code visualizes a directed graph representing Bitcoin transactions that follow Hanyecz's pizza buying transaction.\n",
    "\n",
    "The figure generated here is similar to the one used in the \"[Bitcoin in BigQuery: Blockchain Analytics on Public Data](https://cloud.google.com/blog/products/gcp/bitcoin-in-bigquery-blockchain-analytics-on-public-data)\" blog post by Allen Day and Colin Bookman. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "emV8Bn6oYSie"
   },
   "outputs": [],
   "source": [
    "## purchase address\n",
    "hanyecz = \"1XPTgDRhN8RFnzniWCddobD9iKZatrvH4\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "xaPcjyCEYqU8"
   },
   "source": [
    "We use the library `networkx` below to visualize a network of transactions following the pizza purchase by up to 2 degrees (As noted here, our code may return a deeper graph than the target depth if there are repeated transactions from wallet a to b or or self transactions (a -> a)).\n",
    "\n",
    "Hanyecz's payment address is depicted as a red circle while other addresses are blue circles. Arrowheads indicate direction of Bitcoin flow following the pizza purchase transaction. Stroke width is approximately proportional to the amount of Bitcoin moving between addresses."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 232
    },
    "colab_type": "code",
    "id": "WKnO_VjZYtn_",
    "outputId": "d80a19f0-2bd3-4c99-9e89-84e06b7bb762"
   },
   "outputs": [],
   "source": [
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 232
    },
    "colab_type": "code",
    "id": "WKnO_VjZYtn_",
    "outputId": "d80a19f0-2bd3-4c99-9e89-84e06b7bb762"
   },
   "outputs": [],
   "source": [
    "graph = nx.from_pandas_edgelist(total_flows,\n",
    "  source = \"input_key\",\n",
    "  target = \"output_key\",\n",
    "  create_using = nx.DiGraph())\n",
    "\n",
    "pos = nx.kamada_kawai_layout(graph)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {},
   "outputs": [],
   "source": [
    "## color the hanyecz red and the rest of the nodes blue\n",
    "node_colors = list(map(lambda x: \"red\" if x == hanyecz else \"blue\", graph.nodes))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [],
   "source": [
    "## calculate width based on satoshis\n",
    "satoshi_stats = total_flows.describe()['satoshis']\n",
    "def get_width(x, stats):\n",
    "    if x < stats['25%']:\n",
    "        return 1\n",
    "    elif x >= stats['25%'] and x < stats['50%']:\n",
    "        return 2\n",
    "    elif x >= stats['50%'] and x < stats['75%']:\n",
    "        return 3\n",
    "    else:\n",
    "        return 4\n",
    "edge_widths = total_flows['satoshis'].apply(lambda x: get_width(x, satoshi_stats))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 232
    },
    "colab_type": "code",
    "id": "WKnO_VjZYtn_",
    "outputId": "d80a19f0-2bd3-4c99-9e89-84e06b7bb762"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "f = plt.figure()\n",
    "nx.draw_networkx(graph, pos,\n",
    "  with_labels = False,\n",
    "  alpha = 0.5,\n",
    "  node_size = 150,\n",
    "  node_color = node_colors,\n",
    "  width = edge_widths / 4,\n",
    "  arrowsize = 20,\n",
    "  ax=f.add_subplot(111))\n",
    "plt.title(\"BTC inputs upstream of pizza purchase address (red)\")\n",
    "plt.axis('off')\n",
    "f.savefig(\"graph.png\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [],
   "name": "tracing-the-10-000-btc-pizza.ipynb",
   "provenance": [],
   "version": "0.3.2"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
